(PYTHON) Day - 24 XML

Reference

  • 문제 출처 - HackerRank
  • 파이썬 연습 - Practice - Python

개인적인 생각과 상상으로 작성한 내용들이 포함되어 있습니다
문제를 풀고 Discussion Tab을 참고하며 코드 스타일을 개선하려고 노력하고자 합니다


HackerRank


XML

XML 1 - Find the Score


문제 : XML 문서의 속성값들의 개수를 구하는 문제
참고 : XML

input
6
<feed xml:lang='en'>
<title>HackerRank</title>
<subtitle lang='en'>Programming challenges</subtitle>
<link rel='alternate' type='text/html' href='http://hackerrank.com/'/>
<updated>2013-12-25T12:00:00</updated>
</feed>
output
5
import sys
import xml.etree.ElementTree as etree

def get_attr_number(node):
num = len(node.attrib)
return num + sum((get_attr_number(child) for child in node))

if **name** == '**main**':
sys.stdin.readline()
xml = sys.stdin.read()
tree = etree.ElementTree(etree.fromstring(xml))
root = tree.getroot()
print(get_attr_number(root))

XML2 - Find the Maximum Depth


문제 : XML 문서의 최대 depth를 구하는 문제
예제 : feed 태그는 root로 depth는 0이다. title, subtitle, link, updated 태그들은 depth가 1이다.

input
6
<feed xml:lang='en'>
<title>HackerRank</title>
<subtitle lang='en'>Programming challenges</subtitle>
<link rel='alternate' type='text/html' href='http://hackerrank.com/'/>
<updated>2013-12-25T12:00:00</updated>
</feed>
output
1
import xml.etree.ElementTree as etree

maxdepth = 0
def depth(elem, level):
global maxdepth
level += 1
if level >= maxdepth:
maxdepth = level
for child in elem:
depth(child, level)

if **name** == '**main**':
n = int(input())
xml = ""
for i in range(n):
xml = xml + input() + "\n"
tree = etree.ElementTree(etree.fromstring(xml))
depth(tree.getroot(), -1)
print(maxdepth)